﻿#region Using
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using eLoje_Model;
using System.Data.SqlClient;
using System.Data;
#endregion

#region Namespace
namespace Eloje_Data
{
    #region Classe
    public class DepartamentoDA : DbMain
    {
        #region Contrutores
        public DepartamentoDA()
        {
            conectar();
        }
        #endregion

        #region Metodos

        public void setDisableDepartamento(int codDepartamento, string descDepartamento, string pSigla, string usuario)
        {
            setAmendDepartamento(codDepartamento,null, descDepartamento, pSigla, "D", usuario, "D");
        }
        public void setEnableDepartamento(int codDepartamento, string descDepartamento, string pSigla, string usuario)
        {
            setAmendDepartamento(codDepartamento, null, descDepartamento, pSigla, "H", usuario, "H");
        }
               
        public List<DepartamentoVO> getDepartamento()
        {
            List<DepartamentoVO> list = null;
            try
            {
                SqlCommand cmd = new SqlCommand("SP_ELOJE_WEB_CAD_DEPARTAMENTO_LISTAR", conn);

                using (IDataReader reader = cmd.ExecuteReader())
                {
                    list = new List<DepartamentoVO>();
                    while (reader.Read())
                    {
                        DepartamentoVO vo = new DepartamentoVO();
                        vo.COD_DEPARTAMENTO = Convert.ToInt32(reader["CD_DEPARTAMENTO"].ToString());
                        vo.SIGLA_DEPARTAMENTO = reader["SIGLA_DEPARTAMENTO"].ToString();
                        vo.DESC_DEPARTAMENTO = reader["DESC_DEPARTAMENTO"].ToString();
                        vo.STATUS = reader["SITUACAO"].ToString();
                        list.Add(vo);
                    }
                }
            }
            catch (Exception ex)
            {

            }
            return list;
        }

        public List<DepartamentoVO> getDepartamentoLog(int pCodDepartamento)
        {
            List<DepartamentoVO> list = null;
            try
            {
                SqlCommand cmd = new SqlCommand("SP_ELOJE_WEB_CAD_DEPARTAMENTO_LOG", conn);

                cmd.CommandType = CommandType.StoredProcedure;
                cmd.Parameters.AddWithValue("@COD_DEPARTAMENTO", pCodDepartamento);

                using (IDataReader reader = cmd.ExecuteReader())
                {
                    list = new List<DepartamentoVO>();
                    while (reader.Read())
                    {
                        DepartamentoVO vo = new DepartamentoVO();
                        vo.DESC_DEPARTAMENTO = reader["DESC_DEPARTAMENTO"].ToString();
                        vo.SIGLA_DEPARTAMENTO = reader["SIGLA_DEPARTAMENTO"].ToString();
                        vo.STATUS = reader["STATUS"].ToString();
                        vo.ACTION = reader["ACTION"].ToString();
                        vo.USER = reader["USUARIO"].ToString();
                        vo.DATA_LOG = Convert.ToDateTime(reader["DATE_TIME"]);
                        list.Add(vo);
                    }
                }
            }
            catch (Exception ex)
            {

            }
            return list;
        }

        public void setAmendDepartamento(int pCodDepartamento, List<Int32> pMedidas, string pDescDepartamento, string pSigla, string pStatus, string pUsuario, string pOper)
        {
            SqlCommand cmd = new SqlCommand("SP_ELOJE_WEB_CAD_DEPARTAMENTO_ALTERAR", conn); 

            //int retorno = 0;           
            cmd.CommandType = CommandType.StoredProcedure;
            cmd.Parameters.AddWithValue("@COD_DEPARTAMENTO", pCodDepartamento);
            cmd.Parameters.AddWithValue("@DESC_DEPARTAMENTO", pDescDepartamento);
            cmd.Parameters.AddWithValue("@SIGLA_DEPARTAMENTO", pSigla);
            cmd.Parameters.AddWithValue("@STATUS", pStatus);
            cmd.Parameters.AddWithValue("@USERID", pUsuario);
            cmd.Parameters.AddWithValue("@OPER", pOper);
            SqlParameter ret = cmd.Parameters.Add("@RET_SUCESS", SqlDbType.TinyInt);
            ret.Direction = ParameterDirection.Output;

            cmd.ExecuteNonQuery();

            //tratar erro
        }

        public void setNewDepartamento(List<Int32> pMedidas, string pDescDepartamento, string pSigla, string pUsuario)
        {
           
            try
            {
                SqlCommand cmd = new SqlCommand("SP_ELOJE_WEB_CAD_DEPARTAMENTO", conn);
                cmd.CommandType = CommandType.StoredProcedure;
                cmd.Parameters.AddWithValue("@DESC_DEPARTAMENTO", pDescDepartamento);
                cmd.Parameters.AddWithValue("@SIGLA_DEPARTAMENTO", pSigla);
                cmd.Parameters.AddWithValue("@USERID", pUsuario);

                SqlParameter cdDepartamento = cmd.Parameters.Add("@COD_DEPARTAMENTO", SqlDbType.Int);
                cdDepartamento.Direction = ParameterDirection.Output;
                SqlParameter ret = cmd.Parameters.Add("@RET_SUCESS", SqlDbType.TinyInt);
                ret.Direction = ParameterDirection.Output;

                cmd.ExecuteNonQuery();


                for (int i = 0; i < pMedidas.Count; i++)
                {
                    SqlCommand _cmd = new SqlCommand("SP_ELOJE_WEB_CAD_DEPARTAMENTO_MEDIDA", conn);
                    _cmd.CommandType = CommandType.StoredProcedure;
                    _cmd.Parameters.AddWithValue("@COD_DEPARTAMENTO", cdDepartamento.Value);
                    _cmd.Parameters.AddWithValue("@COD_MEDIDA", pMedidas[i].ToString());
                    _cmd.Parameters.AddWithValue("@USERID", pUsuario);

                    
                    //SqlParameter _ret = cmd.Parameters.Add("@RET_SUCESS", SqlDbType.TinyInt);
                    //_ret.Direction = ParameterDirection.Output;

                    _cmd.ExecuteNonQuery();
                }
                
                //tratar erro
            }
            catch (Exception)
            {
                throw;
            }
        }
        #endregion
    }
    #endregion
}
#endregion